home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / tree / CompoundStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  2.9 KB  |  146 lines

  1. package sun.tools.tree;
  2.  
  3. import java.io.PrintStream;
  4. import java.util.Hashtable;
  5. import sun.tools.asm.Assembler;
  6. import sun.tools.java.Environment;
  7.  
  8. public class CompoundStatement extends Statement {
  9.    Statement[] args;
  10.  
  11.    public CompoundStatement(int var1, Statement[] var2) {
  12.       super(105, var1);
  13.       this.args = var2;
  14.    }
  15.  
  16.    long check(Environment var1, Context var2, long var3, Hashtable var5) {
  17.       if (this.args.length > 0) {
  18.          var3 = ((Statement)this).reach(var1, var3);
  19.          CheckContext var6 = new CheckContext(var2, this);
  20.  
  21.          for(int var7 = 0; var7 < this.args.length; ++var7) {
  22.             var3 = this.args[var7].check(var1, var6, var3, var5);
  23.          }
  24.  
  25.          var3 &= var6.vsBreak;
  26.       }
  27.  
  28.       return var2.removeAdditionalVars(var3);
  29.    }
  30.  
  31.    public Statement inline(Environment var1, Context var2) {
  32.       var2 = new Context(var2, this);
  33.       boolean var3 = false;
  34.       int var4 = 0;
  35.  
  36.       for(int var5 = 0; var5 < this.args.length; ++var5) {
  37.          Statement var6 = this.args[var5];
  38.          if (var6 != null) {
  39.             if ((var6 = var6.inline(var1, var2)) != null) {
  40.                if (var6.op == 105 && var6.labels == null) {
  41.                   var4 += ((CompoundStatement)var6).args.length;
  42.                } else {
  43.                   ++var4;
  44.                }
  45.  
  46.                var3 = true;
  47.             }
  48.  
  49.             this.args[var5] = var6;
  50.          }
  51.       }
  52.  
  53.       switch (var4) {
  54.          case 0:
  55.             return null;
  56.          case 1:
  57.             int var13 = this.args.length;
  58.  
  59.             while(var13-- > 0) {
  60.                if (this.args[var13] != null) {
  61.                   return ((Statement)this).eliminate(var1, this.args[var13]);
  62.                }
  63.             }
  64.          default:
  65.             if (var3 || var4 != this.args.length) {
  66.                Statement[] var14 = new Statement[var4];
  67.                int var7 = this.args.length;
  68.  
  69.                while(var7-- > 0) {
  70.                   Statement var8 = this.args[var7];
  71.                   if (var8 != null) {
  72.                      if (var8.op == 105 && var8.labels == null) {
  73.                         Statement[] var9 = ((CompoundStatement)var8).args;
  74.  
  75.                         for(int var10 = var9.length; var10-- > 0; var14[var4] = var9[var10]) {
  76.                            --var4;
  77.                         }
  78.                      } else {
  79.                         --var4;
  80.                         var14[var4] = var8;
  81.                      }
  82.                   }
  83.                }
  84.  
  85.                this.args = var14;
  86.             }
  87.  
  88.             return this;
  89.       }
  90.    }
  91.  
  92.    public Statement copyInline(Context var1, boolean var2) {
  93.       CompoundStatement var3 = (CompoundStatement)((Node)this).clone();
  94.       var3.args = new Statement[this.args.length];
  95.  
  96.       for(int var4 = 0; var4 < this.args.length; ++var4) {
  97.          var3.args[var4] = this.args[var4].copyInline(var1, var2);
  98.       }
  99.  
  100.       return var3;
  101.    }
  102.  
  103.    public int costInline(int var1) {
  104.       int var2 = 0;
  105.  
  106.       for(int var3 = 0; var3 < this.args.length && var2 < var1; ++var3) {
  107.          var2 += this.args[var3].costInline(var1);
  108.       }
  109.  
  110.       return var2;
  111.    }
  112.  
  113.    public void code(Environment var1, Context var2, Assembler var3) {
  114.       CodeContext var4 = new CodeContext(var2, this);
  115.  
  116.       for(int var5 = 0; var5 < this.args.length; ++var5) {
  117.          this.args[var5].code(var1, var4, var3);
  118.       }
  119.  
  120.       var3.add(var4.breakLabel);
  121.    }
  122.  
  123.    public boolean firstConstructor() {
  124.       return this.args.length > 0 && this.args[0].firstConstructor();
  125.    }
  126.  
  127.    public void print(PrintStream var1, int var2) {
  128.       super.print(var1, var2);
  129.       var1.print("{\n");
  130.  
  131.       for(int var3 = 0; var3 < this.args.length; ++var3) {
  132.          ((Statement)this).printIndent(var1, var2 + 1);
  133.          if (this.args[var3] != null) {
  134.             this.args[var3].print(var1, var2 + 1);
  135.          } else {
  136.             var1.print("<empty>");
  137.          }
  138.  
  139.          var1.print("\n");
  140.       }
  141.  
  142.       ((Statement)this).printIndent(var1, var2);
  143.       var1.print("}");
  144.    }
  145. }
  146.